package nio;

import java.io.*;
import java.nio.ByteBuffer;
import java.nio.channels.FileChannel;

/**
 * @Author: Dgg
 * @Date: 2021/11/24 22:19
 * <p>
 * 拷贝文件
 */
public class NioChannelTest_3 {
	public static void main(String[] args) throws IOException {
		String str = "Learn and live.";
		File file = new File("springboot_netty/src/test/java/1.txt");
		FileInputStream fileInputStream = new FileInputStream(file);
		FileOutputStream fileOutputStream = new FileOutputStream("springboot_netty/src/test/java/2.txt");
		// 通过输入流对象获取文件channel
		FileChannel channel_1 = fileInputStream.getChannel();
		FileChannel channel_2 = fileOutputStream.getChannel();
		ByteBuffer allocate = ByteBuffer.allocate(512);

		while (true) {

			allocate.clear();
			// 和write 一样 都是从 buffer 的属性 position 位置开始读取数据 读到结束 position就是 多少
			int read = channel_1.read(allocate);

			// 读取完数据
			if (read == -1) {
				break;
			}
			// 将buffer 中的数据写入到 channel
			// 翻转将 position 清空为0 limit 为上一次读写(position)的大小。
			allocate.flip();
			// 和read一样都是从position 读到limit，但是 read是因为读完了还没到limit 所以没收到limit 的限制
			channel_2.write(allocate);
		}
		fileInputStream.close();
		fileOutputStream.close();
	}
}
